Herencia

Descripcion

Como hacer que una clase herede de otra.

La herencia nos permite crear subclases a partir de clases que ya tenemos creadas. Estas subclases contendrán los campos y metodos de la superclase

Metodo

Para hacer que una clase herede de otra lo hacemos poniendo dos puntos (:) despues del nombre de la clase e indicando despues de los dos puntos de que clase hereda.

Vamos a crear una clase Estudiante que herede de la clase Persona.

Clase Persona, con un campo nombre y una funcion ObtenerLongitudNombre:

namespace PersonaApp
{
    public class Persona : Object
    {
        protected string nombre;

        public int ObtenerLongitudNombre()
        {
            return nombre.Length;
        }
    }
}

Clase Estudiante que hereda de Persona, con un constructor para establecer el campo nombre:

namespace PersonaApp
{
    public class Estudiante : Persona
    {
        string instituto;

        public Estudiante(string nombre)
        {
            this.nombre = nombre;
        }

    }
}

Cuando instanciamos la clase Estudiante vemos que podemos usar el método que estaba definido en la clase Persona, ya que Estudiante hereda de persona

using PersonaApp;

Estudiante estudiante = new Estudiante("Pepe");

Console.Write(estudiante.ObtenerLongitudNombre());
Constructores

Los constructores no se heredan al igual que los metodos normales, para heredar un constructor tenemos que hacerlo de manera explicita tal que así:

Clase Persona con constructor con un parámetro:

namespace PersonaApp
{
    public class Persona : Object
    {
        protected string nombre;

        public Persona(string nombre)
        {
            this.nombre = nombre;
        }

        public int ObtenerLongitudNombre()
        {
            return nombre.Length;
        }
    }
}

Clase Estudiante declarando la herencía del constructor con un parámetro:

namespace PersonaApp
{
    public class Estudiante : Persona
    {
        string instituto;

        public Estudiante(string nombre) : base(nombre)
        {
        }
    }
}

Usamos : base para asociar el constructor de la subclase con el constructor de la superclase.

Problema al no tener constructor por defecto en la clase padre

Si no tenemos un constructor por defecto en la clase padre nos podemos encontrar con el siguiente error al heredar:

There is no argument given that correspond to the required formal parameter 'nombre' of 'Persona.Persona(string)'

Para solucionar este error solo tenemos que declarar el constructor por defecto en la superclase o si no queremos crear el constructor por defecto tambien podemos hacer que la subclase herede el constructor que tiene creado la superclase (utilizando :base como se indica en el apartado anterior)

Tags

C# | Herencia